Java Collections
1. Custom Classes
Custom classes in Java are user-defined classes that encapsulate data and behavior. They are the building blocks of object-oriented programming in Java.
Example:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
2. Collections
Collections in Java are used to store, retrieve, manipulate, and communicate aggregate data. The Java Collections Framework provides a set of interfaces and classes to handle collections of objects.
a. List
A List
is an ordered collection that allows duplicate elements.
i. ArrayList
ArrayList
is a resizable array implementation of the List
interface.
import java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
System.out.println(list); // [Apple, Banana, Cherry]
}
}
ii. LinkedList
LinkedList
is a doubly-linked list implementation of the List
and Deque
interfaces.
import java.util.LinkedList;
import java.util.List;
public class LinkedListExample {
public static void main(String[] args) {
List<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
System.out.println(list); // [Apple, Banana, Cherry]
}
}
iii. Stack
Stack
is a last-in-first-out (LIFO) stack of objects.
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
stack.push("Apple");
stack.push("Banana");
stack.push("Cherry");
System.out.println(stack.pop()); // Cherry
}
}
iv. Vector
Vector
is a synchronized resizable array implementation of the List
interface. It is thread safe.
import java.util.Vector;
import java.util.List;
public class VectorExample {
public static void main(String[] args) {
List<String> vector = new Vector<>();
vector.add("Apple");
vector.add("Banana");
vector.add("Cherry");
System.out.println(vector); // [Apple, Banana, Cherry]
}
}
b. Set
A Set
is a collection that does not allow duplicate elements.
i. HashSet
HashSet
is a hash table implementation of the Set
interface.
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple");
System.out.println(set); // [Apple, Banana]
}
}
ii. TreeSet
TreeSet
is a red-black tree implementation of the Set
interface.
import java.util.TreeSet;
import java.util.Set;
public class TreeSetExample {
public static void main(String[] args) {
Set<String> set = new TreeSet<>();
set.add("Banana");
set.add("Apple");
set.add("Cherry");
System.out.println(set); // [Apple, Banana, Cherry]
}
}
c. Queue
A Queue
is a collection designed for holding elements prior to processing.
i. ArrayDeque
ArrayDeque
is a resizable array implementation of the Deque
interface.
import java.util.ArrayDeque;
import java.util.Queue;
public class ArrayDequeExample {
public static void main(String[] args) {
Queue<String> queue = new ArrayDeque<>();
queue.add("Apple");
queue.add("Banana");
queue.add("Cherry");
System.out.println(queue.poll()); // Apple
}
}
ii. LinkedList (as Queue)
LinkedList
can also be used as a Queue
.
import java.util.LinkedList;
import java.util.Queue;
public class LinkedListQueueExample {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
queue.add("Apple");
queue.add("Banana");
queue.add("Cherry");
System.out.println(queue.poll()); // Apple
}
}
iii. PriorityQueue
PriorityQueue
is a priority heap implementation of the Queue
interface.
import java.util.PriorityQueue;
import java.util.Queue;
public class PriorityQueueExample {
public static void main(String[] args) {
Queue<String> queue = new PriorityQueue<>();
queue.add("Banana");
queue.add("Apple");
queue.add("Cherry");
System.out.println(queue.poll()); // Apple
}
}
3. Map
A Map
is an object that maps keys to values.
a. HashMap
HashMap
is a hash table implementation of the Map
interface.
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public class HashMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
System.out.println(map.get("Banana")); // 2
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.print(entry.getKey());
System.out.print(", ");
System.out.println();
System.out.print(entry.getValue());
System.out.print(", ");
/* Output ->
Apple, Banana, Cherry,
1, 2, 3,
*/
}
for (int value : map.values()) {
System.out.print(value);
System.out.print(", ");
/* Output ->
1, 2, 3,
*/
}
}
}
b. TreeMap
TreeMap
is a red-black tree implementation of the Map
interface.
import java.util.TreeMap;
import java.util.Map;
public class TreeMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<>();
map.put("Banana", 2);
map.put("Apple", 1);
map.put("Cherry", 3);
System.out.println(map.get("Apple")); // 1
}
}
4. Iterator
An Iterator
is used to traverse through the elements of a collection.
a. ListIterator
ListIterator
is an iterator for lists that allows bidirectional traversal.
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
5. Custom Comparator
A Comparator
is used to define a custom order for objects.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CustomComparatorExample {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 30));
people.add(new Person("Bob", 25));
people.add(new Person("Charlie", 35));
Collections.sort(people, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(p1.getAge(), p2.getAge());
}
});
for (Person person : people) {
System.out.println(person);
}
}
}
6. Common Algorithms
Collections.sort(list)
Sorts the specified list into ascending order.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Banana");
list.add("Apple");
list.add("Cherry");
Collections.sort(list);
System.out.println(list); // [Apple, Banana, Cherry]
}
}
Collections.max(list)
Returns the maximum element in the list.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MaxExample {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(10);
list.add(20);
list.add(5);
System.out.println(Collections.max(list)); // 20
}
}
Collections.min(list)
Returns the minimum element in the list.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MinExample {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(10);
list.add(20);
list.add(5);
System.out.println(Collections.min(list)); // 5
}
}
Collections.reverse(list)
Reverses the order of elements in the list.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ReverseExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
Collections.reverse(list);
System.out.println(list); // [Cherry, Banana, Apple]
}
}
Collections.sort(array)
Sorts the specified array into ascending order.
import java.util.Arrays;
import java.util.Collections;
public class SortArrayExample {
public static void main(String[] args) {
String[] array = {"Banana", "Apple", "Cherry"};
Arrays.sort(array);
System.out.println(Arrays.toString(array)); // [Apple, Banana, Cherry]
}
}
Collections.frequency(list, element)
Returns the number of elements in the list equal to the specified element.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class FrequencyExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple");
System.out.println(Collections.frequency(list, "Apple")); // 2
}
}
Collections.binarySearch(list, key)
Searches the list for the specified key using the binary search algorithm.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class BinarySearchExample {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(10);
list.add(20);
list.add(30);
int index = Collections.binarySearch(list, 20);
System.out.println(index); // 1
}
}
Math.pow(base, exponent)
Returns the value of the first argument raised to the power of the second argument.
public class MathPowExample {
public static void main(String[] args) {
double result = Math.pow(2, 3);
System.out.println(result); // 8.0
}
}